package com.kuaiyin.exception;

import com.kuaiyin.enums.BizCodeEnum;
import lombok.Getter;

/**
 * 基础业务异常（所有自定义异常的父类）
 */
public class BaseException extends RuntimeException {
    // Getter 方法
    // 错误码
    @Getter
    private final int code;
    // 错误信息
    private final String message;
    // 错误详情（可选）
    @Getter
    private final Object data;

    // 全参数构造方法
    public BaseException(int code, String message, Object data) {
        super(message);
        this.code = code;
        this.message = message;
        this.data = data;
    }

    // 快捷构造方法
    public static BaseException of(int code, String message) {
        return new BaseException(code, message, null);
    }

    public static BaseException of(int code, String message, Object data) {
        return new BaseException(code, message, data);
    }

    //枚举错误码
    /**
     *
     *  使用案例： throw BaseException.of(BizCodeEnum.STRESS_MODULE_ID_NOT_EXIST);
     */
    // 新增构造方法
    public BaseException(BizCodeEnum bizCodeEnum) {
        this(bizCodeEnum.getCode(), bizCodeEnum.getMessage(), null);
    }
    // 新增静态方法
    public static BaseException of(BizCodeEnum bizCodeEnum) {
        return new BaseException(bizCodeEnum.getCode(), bizCodeEnum.getMessage(), null);
    }


    @Override
    public String getMessage() {
        return message;
    }

}